package com.mf.springboot.backend.userAuth.config;


import com.mf.springboot.backend.commonModule.dbConnConfig.DatabaseContextHolder;
import com.mf.springboot.backend.commonModule.dbConnConfig.DatabaseType;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class DataSourceAspect {

    /**
     * 使用空方法定义切点表达式
     */
    @Pointcut("execution(* com.mf.springboot.backend.mybatisModule.mapper.*.*(..))")
    public void declareJointPointExpression() {
    }

    /*
    @Before("declareJointPointExpression()")
    public void setDataSourceKey(JoinPoint point){
        //根据连接点所属的类实例，动态切换数据源
        if (point.getTarget() instanceof LoginService) {
            DatabaseContextHolder.setDatabaseType(DatabaseType.test1);
        } else if(point.getTarget() instanceof LoginTestService){//连接点所属的类实例是（当然，这一步也可以不写，因为defaultTargertDataSource就是该类所用的mytestdb）
            DatabaseContextHolder.setDatabaseType(DatabaseType.test2);
        }
    }
    */
    @Before("declareJointPointExpression()")
    public void setDataSourceKey(JoinPoint point){
        String methodName = point.getSignature().getName();
        //根据方法名来判断读还是写数据源
        if (methodName.startsWith("get") || methodName.startsWith("select")){
            System.out.println("read db");
            DatabaseContextHolder.setDatabaseType(DatabaseType.read);
        }else {
            System.out.println("write db");
            DatabaseContextHolder.setDatabaseType(DatabaseType.wirte);
        }

        //根据连接点所属的类实例，动态切换数据源
//        if (point.getTarget() instanceof LoginService) {
//            DatabaseContextHolder.setDatabaseType(DatabaseType.test1);
//        } else if(point.getTarget() instanceof LoginTestService){//连接点所属的类实例是（当然，这一步也可以不写，因为defaultTargertDataSource就是该类所用的mytestdb）
//            DatabaseContextHolder.setDatabaseType(DatabaseType.test2);
//        }
    }
}